Méthodes d’indexation
EMu utilise deux méthodes basiques d’indexations :
La méthode de hachage linéaire est utilisée pour fournir une consultation basée sur les clés. Une clé est une valeur unique utilisée pour identifier un enregistrement. Dans EMu, il s’agit du NEI (Numéro d’enregistrement interne). La recherche de clés doit non seulement être rapide, mais elle doit également garantir l’unicité. Il ne doit pas être possible d’avoir deux enregistrements avec la même clé (NEI). L’algorithme de hachage linéaire garantit qu’un enregistrement peut être localisé via le NEI en une moyenne de 1,1 accès au disque, ce qui est très efficace. Il garantit également l’unicité de la clé.
De nombreuses institutions disposent de séquences de numérotation qui identifient de manière unique un objet ou un événement. Dans certains cas, le numéro est presque toujours unique, à quelques exceptions près. EMu permet à certains champs d’être désignés comme uniques, ce qui garantit que lorsqu’un enregistrement est sauvegardé, la valeur du champ n’a pas été saisie auparavant. Il est parfois nécessaire d’assouplir cette vérification pour permettre l’enregistrement de numéros « doublons ». La vérification unique effectuée sur ces champs utilise également la méthode de hachage linéaire.
Même si la méthode à Deux niveaux dicte la manière dont une recherche doit être exécutée en interne, il s’agit d’une méthode flexible qui prend en charge un grand nombre de variantes de recherche dans une même structure. Par exemple, EMu propose une recherche par mot pour tous les champs. Il suffit de saisir un ou plusieurs mots, dans n’importe quel ordre, dans le champ à rechercher, et les correspondances seront rapidement retrouvées. EMu supporte également la recherche phonétique via l’opérateur @
. Si un mot est précédé de \@, tous les mots qui sonnent comme le mot saisi seront trouvés. La recherche phonétique utilise la même indexation que la recherche par mots, même si les résultats sont différents. La différence réside dans la définition d’un terme :
- Pour des recherches basées sur un mot, le terme est un mot.
- Pour des recherches basées sur la phonétique, un terme est une série de nombres représentant le son du mot (pour cela un algorithme complexe convertit un mot en groupe de sons de bases).
Les méthodes d’indexation introduites avec EMu 3.1 ont amélioré la prise en charge des recherches par caractères génériques :
- La méthode Null based indexing permet des recherches très rapides pour des champs vides ou non.
- La méthode Partial based indexing offre le support d’index complets pour la recherche de caractères génériques qui spécifient les premières lettres d’un mot.
Ces deux méthodes utilisent le schéma de la méthode à deux niveaux. Elles fournissent simplement des termes différents basés sur le type d’indexation requis.
La recherche de base fournie dans EMu est basée sur les mots. Un terme dans la recherche par mots est une séquence de caractères alphanumériques jusqu’à un caractère de rupture de mot. Un caractère de rupture de mot est constitué de tous les caractères de ponctuation, à l’exception des apostrophes (’) et des caractères de soulignement (_), et de tous les caractères d’espacement. Par exemple, la chaîne :
Relax. You know you’re in safe hands.
devient les mots :
relax
you
know
youre
in
safe
hands
Notons comment la ponctuation est retirée et que la casse est convertie en minuscule (recherche en casse minuscule). Les mots ci-dessus sont des termes de recherches qui peuvent être utilisés pour localiser l’échantillon de la chaîne. Lorsqu’une indexation basée sur un mot est utilisée, des termes supplémentaires sont générés par paire de mots (deux mots consécutifs dans la même phrase). Pour l’exemple ci-dessus les paires générées sont les suivantes :
relax you
you know
know youre
youre in
in safe
safe hands
Les paires de mots offrent un support direct à la recherche par phrase, c’est-à-dire une recherche où les mots sont placés entre guillemets (par exemple, « entre de bonnes mains »). L’activation de la recherche par mot active automatiquement la recherche par phrase.
Dans certains cas il peut être intéressant de rechercher des variations sur la base d’un mot sans se préoccuper du temps ou de la forme du mot utilisé. Considérons une recherche sur le mot election :
- Une recherche basée sur un mot retournera toutes les occurrences pour le mot election, mais ne retrouvera pas elect, elected, elector, electing, etc.
- Une recherche basée sur le lemme, est spécifiée en précédent le mot avec un tilde (
~
), cette recherche trouvera toutes les variations du mot.
Dans l’indexation lemmatique, le terme de base est la racine du mot (dans ce cas, elect). La saisie de n’importe quelle variante du mot précédée de \~ entraînera la recherche du mot racine (par exemple, la recherche de \~elected entraînera la recherche du terme elect). L’algorithme de conversion d’un mot en son mot racine est complexe et a été affiné au fil des ans. Il ne s’agit pas d’un simple mécanisme de troncature, sinon \~elect correspondrait à electric. Les règles utilisées pour déterminer le mot racine sont efficaces pour le texte anglais uniquement.
Dans EMu, l’indexation lemmatique n’est pas activée sur de nombreux champs. Si elle n’est pas activée, les recherches lemmatiques sont toujours possibles, mais la méthode de recherche exhaustive est utilisée. En général, les champs qui contiennent du texte descriptif ou des champs basés sur des notes sont de bons candidats pour l’indexation lemmatique.
Lors d’une recherche de noms ou de termes scientifiques, il est souvent utile de pouvoir rechercher des enregistrements qui contiennent des noms dont la prononciation ressemble à celle du terme de recherche. L’indexation basée sur la phonétique (Phonetic based indexing) fournit cette fonctionnalité. Le terme de base pour une recherche phonétique est une séquence de nombres. Chaque mot est converti en une séquence de nombres qui encode les groupes de sons de bases qui forment un mot. La séquence de nombres est ensuite générée pour la recherche et les mots qui génèrent la même séquence (et donc qui se prononcent de la même façon) sont retenus.
Une recherche phonétique est spécifiée en précédent un mot avec le caractère @
, par ex. \@terme.
L’algorithme utilisé pour convertir un mot en son groupe de sons de base est très complexe car les lettres peuvent prendre des sons différents en fonction de celles qui les entourent. Un certain nombre d’améliorations ont été apportées à l’algorithme de base au cours des années.
Dans EMu, l’indexation phonétique n’est pas activée sur de nombreux champs. Elle est activée sur les champs qui contiennent généralement des noms (par exemple, les champs prénom et nom). Si l’indexation phonétique n’est pas activée, la recherche phonétique est toujours disponible, mais la méthode de recherche exhaustive est utilisée.
Occasionnellement, on souhaite avoir des recherches qui retournent les enregistrements avec seulement la valeur exacte entrée dans le champ. L’indexation basée sur la chaîne de caractères (String based indexing) utilise le contenu complet du champ comme terme de recherche et seuls les enregistrements avec exactement le même contenu que le terme de recherche seront retournés. Par exemple, deux enregistrements ont l’une ou l’autre de ces valeurs dans un champ :
Melbourne
North Melbourne
Une recherche par mot basée sur Melbourne
comme terme de recherche retournera les deux enregistrements (car ils contiennent tous deux le mot Melbourne). Une recherche basée sur une Chaîne, utilisant Melbourne, ne retournera que le premier enregistrement, car un seul enregistrement contient Melbourne et rien d’autre.
La recherche basée sur la Chaîne n’est pas largement utilisée dans EMu (car la recherche basée sur les mots offre un mécanisme de recherche plus flexible et plus utile). Il est activé pour les champs de sécurité (SecCanDisplay_tab, SecCanEdit_tab et SecCanDelete_tab) utilisés par la Sécurité au niveau de l’enregistrement. Étant donné que la Sécurité au niveau de l’enregistrement utilise des noms de groupe et des noms d’utilisateur, il est utile d’utiliser la recherche basée sur la Chaîne pour éviter les erreurs de noms (par exemple, sur un groupe appelé Herpétologie et un autre appelé Gérants en Herpétologie).
Certaines formes de données peuvent être recherchées en localisant tous les enregistrements situés entre les points de départ et d’arrivée, ce que l’on appelle une recherche par plage. EMu fournit une recherche par plage pour un certain nombre de types de données : latitude, longitude, date, heure et nombres (entiers et à virgule flottante). Les recherches par plages sont spécifiées à l’aide des opérateurs relationnels suivants :
- Moins que (<)
- Moins que ou égal (<=)
- Plus grand que (>)
- Plus grand que ou égal (>=)
Pour rechercher tous les enregistrements insérés entre le 1er janvier 2006 et le 28 février 2006, dans le champ Date d’insertion, il faudra spécifier :
>="1er janvier 2006" <="28 février 2006"
Notons l’utilisation (et la position) des doubles guillemets car les dates contiennent des espaces.
La recherche encadrée est basée sur une variation du schéma d’indexation à deux niveaux utilisé par d’autres méthodes d’indexations. Le principe de cette méthode est de transformer la valeur d’un champ de recherche en un intervalle, puis de le diviser en une série d’intervalles distincts. Ensuite, pour chaque champ, des termes de valeur sont générés pour indiquer dans quels intervalles se situe la valeur. En utilisant ces termes, il est possible de fournir des recherches encadrées efficaces.
Parfois, on cherche seulement à savoir si un champ contient une valeur ou non. Par exemple, pour déterminer si un enregistrement a été assigné ou non à un département, le caractère de recherche générique !*
peut être utilisé dans le champ Département (SecDepartment_tab).
La méthode d’indexation NULL based fournit un terme additionnel qui indique si le champ contient une valeur ou non. Ce terme additionnel est utilisé pour fournir une recherche très rapide quand certains caractères génériques sont utilisés :
\!\*
trouve les enregistrements pour lesquels le champ ne contient pas de valeurs.\*
trouve les enregistrements pour lesquels le champ contient une valeur.
La recherche Null based peut aussi être utilisée pour déterminer si un champ attaché est vide ou non :
\!\+
pour des enregistrements qui n’ont pas d’attachements.\+
pour des enregistrements qui ont des attachements.
La plupart des recherches basées sur des caractères génériques (c’est-à-dire recherchant des motifs ou une partie d’un mot) spécifient les premières lettres. Par exemple, vous pouvez vouloir trouver toutes les personnes dont le nom de famille commence par Al*
. Puisque l’indexation standard d’EMu est basée sur les mots, les recherches basées sur les caractères génériques doivent utiliser la méthode de recherche exhaustive pour localiser les correspondances. Une telle recherche peut prendre un certain temps pour un très grand nombre d’enregistrements.
La méthode d’indexation Partial based fournit un mécanisme très efficace pour la recherche de caractères génériques où les lettres de début des mots sont spécifiées(c.-à-d. quand une ou plusieurs lettres ou digits apparaissent au début de l’expression). La méthode prend chaque mot d’un champ et génère un terme basé sur le nombre de lettres de début à indexer. Une partie de la configuration de la méthode d’indexation partial based est le nombre de lettres à utiliser pour générer des termes partiels. Par exemple, un champ peut être configuré pour fournir un index partiel des 1,3,5
premières lettres de chaque mot. Si nous prenons la phrase suivante :
Relax. You know you’re in safe hands.
les termes suivants sont générés pour une indexation utilisant la méthode partial based indexing :
r |
Donc si nous recherchons rel\* les termes à trois lettres seront utilisés pour localiser les enregistrements correspondants. Le mécanisme de recherche utilise tous les index possibles ; par exemple, si vous recherchez re\* les termes avec une seule lettre sont utilisés pour retrouver les correspondances potentielles, qui sont ensuite contrôlées pour vérifier si la seconde lettre correspond également. La méthode partial based indexing pour des recherches basées sur les caractères génériques avec les premières lettres du terme, délivre le même niveau de réponse que la méthode basée sur le mot.
La méthode partial based indexing est activée sur un faible nombre de champs, typiquement sur ceux contenant des noms.
Indexation Solr
Une troisième méthode d’indexation, disponible avec EMu 8.0, permet d’utiliser Apache Solr pour la recherche plutôt que l’indexation par défaut basée sur Texpress. Les avantages de l’indexation Solr par rapport à l’indexation Texpress sont les suivants :
- utilisation du disque considérablement réduite ;
- recherche rapide par plage de valeurs numériques, de dates, d’heures, de latitudes et de longitudes ;
- recherche rapide de caractères génériques (motifs) sans avoir recours à des index partiels ;
- élimination des fausses correspondances (le nombre d’enregistrements correspondants est toujours correct) ;
- aucune nécessité de maintenance nocturne ou hebdomadaire pour reconstruire les index ;
- aucune limite configurée sur le nombre d’enregistrements dans un module ; et
- pas de phase de découpage des bits lorsqu’une réindexation est effectuée.
Plus de détails ici.